Von Kodi aus Script auf anderer Linux-Maschine ausführen lassen

  • Hallo,

    ich würde gern von Kodi aus Scripte, die auf anderen (LInux-)Maschinen liegen ausführen. Häufigstes Einsatzgebiet dürfte ein Shutdown-Script für meinen PC oder meinen Sat-Receiver (mit Firmware auf LInux-Basis) sein. Ich möchte diese gern direkt vom Schlfazimmer aus ausschalten können, wenn ich sie für das Streaming zum Raspberry Pi nicht mehr brauche. Vielleicht indem man einen Menü-Eintrag anlegt der keine Inhalte hat sondern ein Script ausführt. Nun bin ich da erstmal komplett überragt wie man sowas einrichtet. Geht das überhaupt so ohne weiteren mit LibreELEC?

    Ich hab den Beitrag weder ins RPi noch in LE-Subforum geschrieben, weil das Problem auch meine anderen Geräte mit Kodi unter Linux betreffen wird. Derzeit steht es aber nur für LE auf dem Pi im Schlafzimmer-HTPC an.

  • Also mir würde spontan einfallen, dass du dir ein entsprechendes Skript erstellst, was du sonst normal per Kommandozeile ausführst und dieses dann per Launcher aus Kodi aufrufst.
    Die sind hauptsächlich zum Starten von Emulatoren und ROMs gedacht. Aber es klappen auch andere Programme. Ich starte darüber beispielsweise Amazon Music und Chrome/Firefox.

    Das nutze ich, da schlank gehalten: https://forum.kodi.tv/showthread.php…8762#pid2668762
    Dies ist der Nachfolger: https://forum.kodi.tv/showthread.php?tid=287826

  • Könnte gehen, meinte ich aber nicht ganz. Da ich ja über das Videomenü auf den UPnP-Server meines Receivers zugreife wäre es günstig diesen Auswahlpunkt direkt im Videomenü zu haben. Ist das machbar? Oder man "verbindet" das Script mit dem UPnP-Menüpunkt, natürlich muss man dann warten bis alles läuft. Neutrino auf dem Receiver dauert etwas.

    Weiß einer ob Libreelec einen SSH-Clienten mitbringt?

  • Ein SSH Client ist auf fast allen Linux Systemen vorhanden. Was meistens fehlt bzw. nachinstalliert werden muss, ist ein SSH Server (Daemon). Dieser ist aber bei LibreELEC auch schon vorhanden.

    Lese mir den Rest nachher nochmal genauer durch mit dem, was du machen möchtest. Code-Execution via UPnP halte ich für keine gute Idee. Das könnte man auch entsprechend misbrauchen, wenn das möglich wäre.

  • Also prinzipiell ist das nicht unmöglich.

    Vorraussetzungen dafür sollten aber sein, dass LE selbst nur per SSH-Schlüsselpaar zu erreichen ist. Unter LE gibt es auf jeden Fall ssh-keygen. Was es nicht gibt ist, ssh-copy-id. Da werde ich mich heute Abend mal drum kümmern.

    Sollte das nachher alles funktionieren und du den private-key auf LE hast, und den public auf der entfernten Maschine, kannst du mit der Datei shutdown.sh arbeiten. Diese Datei ermöglicht, je nachdem ob du "shutdown", "sleep" oder was anderes machst, entsprechende Scripte oder Befehle aufzurufen. Ein Befehl könnte dann sein ssh <user>@<entfernte_Maschine> <Befehl_für_entfernte_Maschine>. Dadurch, dass du dich ja mit ssh-Schlüsselpaar identifizierst, wird der Befehl auch direkt auf der entfernten Maschine ausgeführt und du brauchst keine Passwörter mehr.

    Nachteil ist, dass LE nicht für das Thema "Sicherheit" konzipiert worden ist. Je nachdem, wie du LE konfiguriert hast oder welche Add-ons du ggf. verwendest, kannst du damit die Büchse der Pandora öffnen. Ich bin persönlich kein Freund davon auf LE einen private SSH-Key zu speichern. Ich würde also mindestens Samba auf min 2 und max 3 konfigurieren, den Webserver deaktivieren und der SSH-Zugang würde auch ausschließlich über ein Schlüsselpaar erfolgen, welches ich ebenso mit einem eigenen Passwort versehe.
    Nachteil ist halt, dass wenn du den Webserver deaktivierst, du keine Möglichkeit mehr hast mir Kore oder Yatse Kodi zu bedienen. Das deaktivieren von SMB1 hat, auf Grund des Sicherheitsrisikos auf jeden Fall nur Vorteile, hat aber auch den Nachteil, dass du SMB-Shares anders konfigurieren musst (Einbußen des Komforts).

    Ich verstehe dein Anliegen und werde dir ggf. auch nachher sagen, wie du es verwirklichen kannst (habe meinen Laptop zu Hause vergessen und gerade kein Linux oder LE zum Checken hier). Ich möchte dich nur vorwarnen, dass es evtl. nicht der Weg sein könnte, den ich persönlich gehen würde.

    Was ich machen würde:

    Solange eine Maschine mir einen SSH-Zugang bietet, würde ich den manuell nutzen. Es gibt etliche SSH Clients für mobile Endgeräte (Smartphone/Tablet). Über diese würde ich mich einloggen (wenn ich zu Faul bin um aus dem Bett aufzustehen; was ich verstehen kann :D) und dann den Befehl für den Shutdown absetzen.

    Für deinen Fall:

    Man kann es auf jeden Fall entweder über ein ganz einfaches Add-on regeln (das "Hello World"-Addon als Basis) oder halt auch über die shutdown.sh beim runterfahren von LE.

    Vorteil vom Add-on ist halt, dass du ggf. auswählen kannst, welche Maschine du runter fahren aber LibreELEC weiter nutzen möchtest (Streaming vom NAS weiter nutzen, aber den Sat-Receiver runter fahren z. B.).

    Ich schreibe nachher noch was dazu, wenn ich zu Hause war und das ein oder andere Checken konnte.

  • Ein kleiner Fortschritt ;)

    Was ich geschaft habe ist, dass ich unter LE eine Verbindung über ein SSH-Schlüsselpaar zu meinen Ubuntu-Desktop rechner aufbauen konnte.

    Folgendes muss dafür gemacht werden:

    - auf dem Rechner auf den sich verbunden werden soll, muss ein SSH-Server laufen
    - via SSH auf LibreELEC einloggen und in folgenden Ordner wechseln: cd /storage/.ssh
    - in diesem Ordner ssh-keygen ausführen und der Datei einen entsprechenden Namen geben (als Beispiel id). Das Passwort ist optional. Wenn keines gewünscht wird, einfach 2 mal Enter drücken

    Danach werden 2 Dateien erstellt. Einmal id und id.pub. Letztere (also die *.pub) ist die Datei, die wir auf dem anderen Rechner haben wollen. "pub" = public ...die andere ist die "private"-Datei und die sollte niemand haben außer der Rechner von dem aus man sich verbinden möchte!!!!

    LibreELEC hat keine Option um den Befehl ssh-copy-id <user>@<remote_pc> auszuführen. Daher müssen wir uns mit einem kleinen Umweg behelfen.

    - Im /storage/.ssh Ordner folgenden Befehl ausführen: cat /storage/.ssh/id.pub | ssh <username>@<host-ip> "cat >> ~/.ssh/authorized_keys"

    Achtung:

    ~ ist unter Ubuntu das "Home"-Verzeichnis. Sollte das auf deinem Receiver ein anderes sein, oder der .ssh-Ordner an anderer Stelle liegen (oder gar nicht existieren), wird das Kommando oben nicht funktionieren. Du musst dann den SSH-Ordner auf deinem Receiver suchen (oder an richtiger Stelle erstellen) und sowohl <username>, <host_ip> und den Pfad zum .ssh-Ordner anpassen.

    Du wirst dann einmalig nach dem Passwort für den entfernten Rechner gefragt und dann wird die Datei authorized_keys mit entsprechendem Inhalt erstellt. Diese darf nicht mehr umbenannt werden.

    Damit LibreELEC sich dann wie gewünscht verbinden kann, muss man LE entweder einmal rebooten, den sshd.service neu starten (systemctl restart sshd.servive) oder ssh-keygen -A aufrufen. Danach ist die Verbindung mit ssh <user>@<host_ip> wie konfiguriert möglich. Wenn man kein Passwort verwendet hat, dann klappt es auch sofort ohne.

    Um nun einen Befehl auf einer entfernten Maschine abzusetzen, wenn ich LE ausschalten möchte, bemächtigt man sich der shutdown.sh: https://libreelec.wiki/autostart.sh#shutdownsh

    Man erstellt also auf LE eine Datei via nano /storage/.config/shutdown.sh

    und diese wird mit folgendem Inhalt gefüllt:

    Das ist erstmal der Ausgang der Datei. Die macht so erstmal gar nichts. Möchte ich also nun, dass beim Runterfahren von LE, was ausgeführt wird, dann ändere ich die Datei wie folgt:


    Das einzige Problem an dieser Stelle ist, dass beim Runterfahren von LE, der Netzwerk-Service schon gestoppt wird, bevor die shutdown.sh ausgeführt wird. Somit kommt man wohl um ein Add-on nicht drumherum.

    Da schreibe ich aber die Tage was zu, dafür ist es mir jetzt zu spät und ich habe erstmal hunger :D

    Ich hoffe aber, dass das schon mal irgendwie hilft.

  • Du hast dir mehr Arbeit gemacht also nötig. Wie man SSH mit Schlüsselpaaren verwendet weiß ich, alle meine Rechner haben das. Ich kopiere die auch immer manuell und nicht über ssh-copy-id.

    Das mit dem Shutdown war nur ein Bsp. Interessant für mich wäre wie ich mir selber für Kodi eine kleine GUI basteln könnte, die man mit einem Menüpunkt verknüpft. Oder ist es das was du mit einem Add-On umsetzten willst?

  • Inwiefern siehst du sicherheitsbedenken, wenn man den Schlüssel unter LE speichert?

    Wie loggst du dich auf LE ein? Auch mit Schlüsselpaar? Wenn nicht, dann hat jeder in deinem Netzwerk die Möglichkeit sich mit dem Standard-LibreELEC Passwort via SSH auf deinen Kodi-Client einzuloggen

    Hast du Samba aktiviert und wenn ja, welche Versionen?

    Hast du den Webserver aktiviert? Dieser hat (meines Wissens nach) immer noch den gleichen Bug wie damals.

    Dann kommt es darauf an, was du mit LE machst. Jedes Addon, welches sich auf deinem System befindet könnte über geschickte Programmierung (zumindest soweit ich es mir vorstellen könnte das ganze auszunutzen) sich über das bestehende Schlüsselpaar auf anderen Geräten einzuloggen und dort schadhaften Code auszuführen. Das kommt natürlich immer auf das Add-on an und die normalen Add-ons aus den offiziellen Repos werden dahingegen reviewed...verwendest du aber vielleicht entsprechend böse Add-ons, könnte die Sachlage schon anders aussehen, wenn du dem Schlüsselpaar nicht auch noch ein Passwort vergibst. Du musst bedenken, dass du (und auch alle Add-ons) auf LE immer "root" sind.

    Meine Vermutung ist, dass du dem Schlüsselpaar, mit welchem du dich auf einem anderen Gerät einloggen möchtest, kein Passwort vergibst, da das ganze ja automatisiert ablaufen soll. Vielleicht weißt du es besser als ich, aber ich kenne keinen Weg ein Passwort entsprechend zu hinterlegen, welches dann automatisch dafür genutzt werden könnte, so dass du keine weitere Eingabe mehr machen musst. Wenn du da was weißt, dann bitte ich um Erleuchtung ;) . Bin ja selbst kein Programmierer.

    Interessant für mich wäre wie ich mir selber für Kodi eine kleine GUI basteln könnte, die man mit einem Menüpunkt verknüpft. Oder ist es das was du mit einem Add-On umsetzten willst?

    Was soll der Menüpunkt, den du im Home-Menu einpflanzt, denn im Endeffekt machen? Wofür brauchst du den SSH-Zugang auf ein anderes Gerät über LE?

    Du sagtest:

    Häufigstes Einsatzgebiet dürfte ein Shutdown-Script für meinen PC oder meinen Sat-Receiver (mit Firmware auf LInux-Basis) sein.

    Für was denn sonst noch, wenn das obige jetzt doch nur ein Beispiel gewesen ist?

  • Es geht ja darum einen x-beliebigen Befehl einfach durch anklicken eines Button oder so auf einem anderen Rechner auszuführen. Mir ist da nur der Weg über SSH bekannt und dazu braucht es ein Schlüsselpaar auf LE für den anderen Rechner. Falls man Angst hat da wird Schadcode ausgeführt könnnte man am anderen Rechner sich über einen Benutzer mit minimalen Rechten einloggen.

    Eine andere Anwendung wäre das umschalten des Senders wenn ich vom Receiver zum LE-Pi streame. Da ging früher einmal automatisch bei Senderauswahl, seit neuester Firmware am Receiver nicht mehr. Hatte da mal eine Lösung über das Webinterface des Receivers. Die Buttons der dortigen virtuellen FB sind letztlich Links die man in Scripte packen kann. Müsste ich suchen, hab ich noch irgendwo gespeichert.

  • Eine andere Anwendung wäre das umschalten des Senders wenn ich vom Receiver zum LE-Pi streame.


    Was ist denn das für ein Sat-Receiver? Kannst du da nicht irgendwas Sat->IP realisieren und dann auf LE irgendwas IPTV Simple oder TV-Headend nutzen? Dann passiert doch die Umschaltung der Sender lokal auf dem LibreELEC Gerät.

    Verstehe ich das richtig, dass du auf LE nur das siehst, was am Receiver eingestellt ist? Wenn ja, dann würde ich zuerst an dieser Technik ansetzen und mir da was anderes überlegen.


    Falls man Angst hat da wird Schadcode ausgeführt könnnte man am anderen Rechner sich über einen Benutzer mit minimalen Rechten einloggen.

    Sofern das am entfernten Rechner/Gerät möglich ist, einen weiteren Benutzer hinzuzufügen, ist das eine Möglichkeit.

    So langsam glaube ich zu verstehen, was du vor hast. Du willst gern eine Art GUI-basierte Fernbedienung für Kodi bauen, auf der du alles mögliche realisieren kannst (Navigation, Umschalten, Ausschalten etc...). Da kann ich dir jetzt ad-hoc nichts bauen, was dem Gerecht werden könnte. Ich hätte dir ein script-add-on bauen können, mit dem du den ein oder anderen Befehl an gewisse Maschinen absetzen kannst. Das wäre aber seeeeeeehr weit davon entfernt, wie eine echte schöne GUI auszusehen.

  • Mir reichen ein paar Knöpfe auf einer GUI, ich brauch keine komplette Fernbedienung. Ich hab halt bisher keine gute Anleitung auf Deutsch gefunden wie man sich so ein einblendbares Fenster selber baut. Das muss ja nicht zwangsweise ein Addon sein, oder? Ein Button der ein Skript ausführt in dem der Befehl steht.

    Zur Not sollte das auch per Advanced Launcher gehen, hab ich aber ewig nicht mehr genutzt.

  • Hab jetzt hier ein funktionierendes Skript, dass ich über SSH starten kann. Das ganze geht leider nicht per Advanced Launcher. Da tut sich einfach nichts. Ihc hab da einfach das Skript ausgewählt und die Anwendungsparameter (hier %ROMS%) gelöscht. Muss ich noch etwas ergänzen?

  • Bin jetzt gerade hier reingestolpert aus Neugier...

    So eine Möglichkeit, sich selber einen Button zu definieren und ein selbst fabriziertes Script damit zu starten wäre für mich die ganz hohe Schule.

    Hinsichtlich der resultierenden (Un)Sicherheit des Gesamtsystems habe ich da aber ein flaues Gefühl in der Magengegend.

    In meinem Aeon Nox gibt es zwar Custom defined Items, aber soweit ich das bisher verstanden habe, lassen sich da nur sowieso vorhandene Funktionen dranhängen.

    bunter fisch: ich würde, wenns denn unbedingt sein muß, ein extra Schlüsselpaar nur für diese Aktion erzeugen, damit im Ernstfall möglichst wenig kompromittiert wird.
    Ich meine, irgendwo gelesen zu haben, daß man systemseitig die per ssh ausführbaren Befehle eingrenzen/verbieten/erlauben kann. Falls ich da richtig liege, könntest Du das noch etwas mehr absichern.

    NUC-D34010 + Sundtek-DVB-T2 mit LE-8.2.2/TVH-4.2, Syno-DS413j, Denon-AVR-X1000, TV 55", Raspi-1B + Sundtek-Sat + LE-8.2.2/TVH-4.2, Kodi-Remote (iOS)

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!